Ну тут все очевидно, я абсолютно точно установил источник проблемы и нашел легкодоступное решение, специально для Вас.
Насколько я понимаю, мне совершенно не обязательно его описывать, так как Вы, справедливо полагая что Все люди на Земле, как и Вы, обладают экстрасенсорными способностями, можете подсмотреть его из моей головы.
Потому что огромный Нестандартные объекты может тысяч или больше или Спелл герой до 100 уровень.
из них 60 загрузка просто висит на 1/5.
Если нетак? Проверь если есть файлы war3map.j папка Game\WarcraftIII, надо удалить файл. очень давно тоже 1 раз что за вылет или неправильно выполняет триггер.
Есть способы ускорить загрузку карты не экономя в редакторе объектов
Есть Widgetizer, там очень быстрая загрузка игра, но плохо работает спелл или текст.
Было создано 22 366 679 экземпляров класса CUnitListNode, которые заняли 255.9 МБ памяти.
При очередной попытке выделения, игра упала.
Виной всему утечки памяти: за 21 минуту набралось 80 тысяч групп и 20 тысяч точек.
Также, из-за выполнения большого количества кода, сильно лагает.
На стадии выбора героя (первые две минуты), выполняется 550 000 операций в секунду, а далее — 1 200 000.
Для сравнения: лимит потока — 300 000 операций.
Хорошо, что ты приложил карту, так как в логе маловато информации.
Вопрос решён. Не нужно ничего сортировать. Мне нужно было 3 первых места. Я просто в цикле сравнимал позицию данного игрока в ледербоарде с нужной мне позицией.
Параметры стака ядов с одним и тем же баффом, это нужно чтобы складывались замедлени и\или урон от разных юнитов, или бафф тупо обновлялся.
С одним из параметров яды с разными баффами скатаются независимо, каждый вешает свой бафф. (годная основа для замедляющих способностей)
А игра вылетает из за зацикливания, темболее бафф при удалении и появлении наносит 0.00 ед урона, это так для справки.
Yonsen, обычно юзают предметную способность "запас здоровья" до 999999к хп. Обычно на все случаи жизни, любимый метод. Даем ее в момент нанесения урона. Когда срабатывает событие "юнит получает", то в этот момент урон еще не произошел, нам как бы оповешают, что он будет через 0.00 сек. Получает пассивку и через 0.00 сек урон. Потом хилим. И удаляем способность. Все.
Стремись к использованию одного единственного таймера(по крайней мере это пропагандируется с давних пор. конкретных чисел по производительности дать не могу). Каждый тик таймера увеличиваешь целочисленные переменные, выделенные по одной для каждого игрока. По событию отданного приказа обнуляешь эти переменные. Если переменная > скольки-то, предлагаешь прописать сообщение в чат для кика. Правда в дотке там таймер по получению опыта вроде.
способ 1
вешать структуру на таймер с помощью эксплойта (для тех кто не знает структура это число) а потом этим таймером вызывать нужную функцию спустя 0 секунд
плюсы:
простота
минусы:
требует добавлять иф на каждую новую функцию
второй способ
тоже самое что и 1 только на таймер вешается вдобавок название функции и таймер вызывает её экзекутом
вот моя библиотека по 2 способу и карта с примером
в библиотеке в самом верху есть небольшой док по 3 функциям
Проблема возникает также при переносе вот этого вот в инициализацию триггера тест.
Но при этом если вместо строки вроде "12345" использовать, например, GetAbilityName('Aloc') - то все работает.
Это какой-то баг со строками?
Еще у меня почему-то происходит фантомный клик по центру карты в начале игры
Вобщем не стоит юзать имена функций напрямую в экзекуте и вообще таймеры лучше
Чето совершенно непонятно что вам нужно, найти тот таймер и его индекс в массиве, который истек и запустил триггер?
Ну очень просто , перебором в цикле всех таймеров и смотреть кто истек, тот кто истек того индекс вы и получите, считая шаги цикла.
В чем проблема?.
(100+ таймеров и массив по мне идиотия, неужели нельзя было воспользоваться хештаблицей и создавать\удалять таймеры по мере надобности)
Wyett, ты можешь добавлять подобные этим:
function ... takes ... returns ...
Код
endfunction
Резака купить можно, но это будет абсолютно не похоже на покупку дирижабля.
Можно сделать 2 похожие ауры и одну из них давать в "книге заклинаний" в скрытом виде(Игрок - disable ability - книга заклинаний) когда изучает "официальную ауру". Получится 1 аура действует на союзн. другая на врагов, а если надо проверять на бафф, то поставь условие "или" и воткни проверку бафф первой и второй ауры.
книга заклинаний это такая способность, куда можно запихнуть другие способности, дать книгу юниту, запретить её, чтобы не было видно, а способности внутринеё действовали
баф у ауры убрать нельзя
ибо именно баф даёт все бонусы ауры
для теста можешь триггерно удалять ауру и баф с юнита
бонус от ауры тут же исчезнет
а если не удалять баф то он повесит пару секунд давая бонус
лучше всего это видно на доспехах веры
так что пиши свою ауру
на основе таймера с периодом в 1 секунду и перебором всех юнитов на расстоянии R от владельца ауры и добавлении им бонусов
а так же удалением бонусов у отошедших юнитов
Делаешь ауру на самого себя из "ауры торнадо".
убираешь замедление, в целях ставишь - сам воин, радиус: (-1.00)
выбираешь нужный тебе бафф из списка "заклинаний"
можешь прикрепить спецэффект к ауре, точно так же как это делается у "доспехов веры" (то, что на паладине, в ногах)
При входе юнита в область - даёшь ему эту ауру
При выходе - отнимаешь ауру и бафф (что бы бафф пропадал мгновенно с спецэффектом)
Yonsen, обычно юзают предметную способность "запас здоровья" до 999999к хп. Обычно на все случаи жизни, любимый метод. Даем ее в момент нанесения урона. Когда срабатывает событие "юнит получает", то в этот момент урон еще не произошел, нам как бы оповешают, что он будет через 0.00 сек. Получает пассивку и через 0.00 сек урон. Потом хилим. И удаляем способность. Все.
Событие: Юнит приводит способность в действие
Условие: Примененная способность = Увечье(или что там)
Действие: Уменьшить размер цели заклинания(не имею понятия как там это будет называться, но суть такова)
ну все по стандарту - проверка на вирусы, проверка реестра, чистка реестра, дефрагментация диска, проверка диска, установка в другую директорию, откат на точку восстановления
The Dude, это несерьезно. Все вопросы описаны в большом количестве статей здесь, на нашем сайте - xgm.guru/p/wc3/articles. То, что перечисляешь не верх мастерства WE, а базовые знания. Материалов предостаточно. Успехов в обучении.
Proshel_Doty, иди учи тер вер
если тебя не устраивает то как работает здравый смысл то убей себя
если тебе повезёт то ты переродишься в мире который тебя устраивает
если хочешь чтобы срабатывала каждые 5 раз то это не случайность а тупо счётчик
Как вариант - изначально экструдить ребра, а не с полигоны, там где нужны плоские поверхности. Главное не забыть 2-сторонний материал использовать потом.
а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
Артес Менетил, для начал в задницу яндекс - трешак еще тот, используй гугл. А дальше слушай, напрямую конвертера в MDX с дренора не существует, Импортируй M2 в макс скриптом, потом экспортируй в MDX и используй, экспортировать можешь скрипом экспорта в MDX и вручную добавить материалы в W3ME. Оба скрипта есть на сайте, если тебе нужны юниты с анимациями - тут нужно с бубном поплясать и методами, которых я не знаю, либо скачать плагин NeoDex с хайва и экспортировать через него со всеми прекрасностями, но там тоже нужно будет настраивать, читай гайды на том же хайве, только учти, что они все не на русском
Извлечь м2 можешь программами работающими с новым форматом архивов CASCExplorer или CASCViewer
Учись пользоваться гуглом.
Есть много торрентов, разных сайтов где можно его скачать.
Я бы тебе скинул, но, тут видимо запрещено помогать ссылками. Увы.(
Ну как бы там все одно да потому, код тот же что я описал выше, вот только проверять все надо в МУИ это раз, два время затраченное на синхронизацию может быть пипец каким большим...
function Trig_SyncStr_Actions takes nothing returns nothing
local string splayer = null
local player pl = Player(0)
if GetLocalPlayer() == pl then
call StoreString( udg_Data, "A", "B", "твоя строка!" )
endif
call TriggerSyncReady()
if GetLocalPlayer) == pl then
call SyncStoredString( udg_Data, "A", "B" )
endif
call TriggerSleepAction( 2.00 )
call TriggerSyncReady()
set splayer = GetStoredString( udg_Data, "A", "B" ) // выгрузи строку из кеша в локалку и делай с ней что хочешь
endfunction
//===========================================================================
function InitTrig_SyncStr takes nothing returns nothing
set gg_trg_SyncStr = CreateTrigger( )
call TriggerAddAction( gg_trg_SyncStr, function Trig_SyncStr_Actions )
endfunction
Триггер запускаем ExecuteTrigger а "Твоя строка" заменяется на глобальную переменную.
Сделай проверку на приказы. если допустим ты его заставляешь бежать куда то отменяешь приказ и делаешь ему другой приказ стоять или бежать) или что он там у тебя делает
UniverseRuler, в доте 6-6 использованы игроки 13 и 14
тебе нужно просто сохранять приказ отданный триггерно(ты ведь ими будешь юнитами управлять)
и восстанавливать его при получение приказа для игрока
для этого нужна буленовская переменная для определения триггерный это приказ или нет
и структура/хэш/юзердата для сохранения приказа UniverseRuler:
еще остались асы картостроения, но а сейчас начинаю думать, что их все таки нету
если ас картостроения это человек который воплощает все ваши фантазии в жизнь то тут таких нету и не было
ещё можно создавать всех юнитов за 1 резервного игрока
а автоатаку делать триггерно
этот вариант самый лучший но то просто не сможешь его сделать
ибо нужны джасс+алгоритмы+структуры/хэш
а ты судя по всему ничего из этого не знаешь
Пордон, там мой косяк. Давно на GUI не работал. Вот так верно.
теперь кастом скрипт таков
call UnitAddItemToSlotById(GetManipulatingUnit(),'id вашего предмета',GetForLoopIndexA()-1)
я просто предмет сравнивал с предметом (1=1?)
а надо было 1=x?
в общем щас правльно
карту еще прикрепил. С тебя "+"
Tand, под кодировкой я имею в виду кодировку. Есть такая штука, определяет какими комбинациями нулей и едениц в бинарном виде кодируется каждый символ. Если при сохранении использована не та кодировка, которую понимает игра, то игра, соответственно, неможет сопоставить нулям и еденицам из файла конкретные символы, а значит ничего не показывает или показывает совсем не то, что было написано изначально.
Скачай Notepad++ -встроенные в винду средства годятся разве что заметки о жизни офисного планктона писать.
Wyett, ты можешь добавлять подобные этим:
function ... takes ... returns ...
Код
endfunction
Резака купить можно, но это будет абсолютно не похоже на покупку дирижабля.
Сделай так чтобы игрок (ии) которому принадлежат войска проиграл в самом начале и ии для него откл, и крипы не будут ждать а будут выполнять то что ты прописал в триггерах.
Maniac_91, область это хэндл а значит утекает
максимального количества областей ограничивается количеством оперативной памяти (до 2 гигов вроде) и максимальным количеством хэндлов (2 в 32 степени)
больше ни чем EnergyFrost:
Максимум что тебя ожидает- лаги, которые ты получишь из-за утечек, работая с этими областями. Так что старайся не наплодить утечек и все будет окей.
как правило работа со статичными областями не вызывает утечек (если их не копировать)
ограничений на декорации тоже нету к слову (если не юзать устаревший редактор)
Кристофер, это происходит из-за того, что в материале травы стоит галочка "Незатуманенный" (в переводе ошибка, следовательно, нужно читать "Незатеннёный"). Просто сними галочку и всё заработает.
Это можно сделать путем наложения полупрозрачного черного экрана, правда все в действительности будет как при паузе, действия в игре происходить будут но хп-бары и прочее пропадет
На сколько я помню, делается это с помощью того что на скрине, только там импортировать нужно свой полупрозрачный черный экран
Скрин увы не прогрузился, но поясню так:
Это делается функцией: Спецэффекты -> Фильтр затемнения
P.s. Дурацкий лимит времени на редактирование комментов
Это происходит из-за per-vertex освещения. От подобных визуальных артефактов очень сложно избавиться, но можно немного замаскировать их, подкорректировав модели освещения (например, немного уменьшить интенсивность diffuse освещения и увеличить ambient):
В War3 Model Editor, в окне настроек материалов убрать метку "незатенённый" или "незатуманенный" (лучше обе, а то там вроде как они местами перепутаны).
vincent_freeman, как вариант - держать всегда только одну настоящую способность для строительства и переключать её пустышками. Можно даже попробовать автоматически при нажатии на пустышку активировать строительство чтобы игроку осталось только навести на точку и нажать.
» WarCraft 3 / Фаталит карта
» WarCraft 3 / Таблица - дерево
» WarCraft 3 / Процентный урон
» WarCraft 3 / Один таймер
» WarCraft 3 / Потерял статейку.
» WarCraft 3 / common.ai
» WarCraft 3 / m2
» WarCraft 3 / Бафф Аура
» WarCraft 3 / Скиньте видео
» WarCraft 3 / как сделать респавн крипов?
» WarCraft 3 / Уменьшение атаки
» WarCraft 3 / World editor.
» WarCraft 3 / Очень нестандартные способности.
» Game Dev / Какой движок выбрать?
» 3D Арт и VR / Blender
» WarCraft 3 / Окно здоровья.
» WarCraft 3 / Модели из World of Warcraft
» WarCraft 3 / Синхронизация строк
» WarCraft 3 / Убрать контроль юнита!
» WarCraft 3 / Не могу сделать триггер - как мне кажется простой
» WarCraft 3 / Mpq Editor
» WarCraft 3 / Искусственный интеллект
» WarCraft 3 / Дублируются вещи.
» WarCraft 3 / Освещение
» WarCraft 3 / Триггеры и Нестандартные абилки